package com.ruoyi.web.controller.mall.goodsType.service.impl;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.web.controller.mall.goodsType.domain.GoodsType;
import com.ruoyi.web.controller.mall.goodsType.mapper.GoodsTypeMapper;
import com.ruoyi.web.controller.mall.goodsType.service.IGoodsTypeService;
import com.ruoyi.web.controller.mall.goodsTypeParams.domain.GoodsTypeParams;
import com.ruoyi.web.controller.mall.goodsTypeParams.mapper.GoodsTypeParamsMapper;
import com.ruoyi.web.controller.mall.goodsTypeSpec.domain.GoodsTypeSpec;
import com.ruoyi.web.controller.mall.goodsTypeSpec.mapper.GoodsTypeSpecMapper;
import com.ruoyi.web.controller.mall.goodsTypeSpecValues.domain.GoodsTypeSpecValues;
import com.ruoyi.web.controller.mall.goodsTypeSpecValues.mapper.GoodsTypeSpecValuesMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 商品类型Service业务层处理
 * 
 * @author ruoyi
 * @date 2021-01-18
 */
@Service
public class GoodsTypeServiceImpl implements IGoodsTypeService 
{
    @Autowired
    private GoodsTypeMapper goodsTypeMapper;
    @Autowired
    private GoodsTypeSpecMapper goodsTypeSpecMapper;
    @Autowired
    private GoodsTypeSpecValuesMapper goodsTypeSpecValuesMapper;
    @Autowired
    private GoodsTypeParamsMapper goodsTypeParamsMapper;

    /**
     * 查询商品类型
     * 
     * @param id 商品类型ID
     * @return 商品类型
     */
    @Override
    public GoodsType selectGoodsTypeById(String id)
    {
        return goodsTypeMapper.selectGoodsTypeById(id);
    }

    /**
     * 查询商品类型列表
     * 
     * @param goodsType 商品类型
     * @return 商品类型
     */
    @Override
    public List<GoodsType> selectGoodsTypeList(GoodsType goodsType)
    {
        return goodsTypeMapper.selectGoodsTypeList(goodsType);
    }

    /**
     * 新增商品类型
     * 
     * @param goodsType 商品类型
     * @return 结果
     */
    @Override
    public int insertGoodsType(GoodsType goodsType)
    {
        return goodsTypeMapper.insertGoodsType(goodsType);
    }

    @Override
    @Transactional
    public int addGoodsType(GoodsType goodsType) {
        String id = StringUtils.get32UUID();
        goodsType.setId(id);
        goodsType.setGmtCreate(DateUtils.getNowDate());
        goodsType.setDelFlag(0);
        goodsTypeMapper.insertGoodsType(goodsType);
        List<GoodsTypeSpec> list = goodsType.getTypeSpecList();
        if (list!=null&&list.size()>0){
            int i=0;
            for (GoodsTypeSpec gts:list){
                gts.setId(StringUtils.get32UUID());
                gts.setTypeId(id);
                gts.setGmtCreate(DateUtils.getNowDate());
                gts.setDelFlag(0);
                gts.setLocation(i);
                goodsTypeSpecMapper.insertGoodsTypeSpec(gts);
                i++;

                List<GoodsTypeSpecValues> vlist = gts.getSpecValList();
                if (vlist!=null&&vlist.size()>0){
                    int y =0;
                    for (GoodsTypeSpecValues gv:vlist){
                        gv.setId(StringUtils.get32UUID());
                        gv.setTypeId(id);
                        gv.setSpecId(gts.getSpecId());
                        gv.setDelFlag(0);
                        gv.setLocation(y);
                        gv.setGmtCreate(DateUtils.getNowDate());
                        gv.setTypeSpecId(gts.getId());
                        goodsTypeSpecValuesMapper.insertGoodsTypeSpecValues(gv);
                        y++;
                    }
                }
            }
        }
        List<GoodsTypeParams> pslist = goodsType.getTypeParamsList();
        if (pslist!=null&&pslist.size()>0){
            int i=0;
            for (GoodsTypeParams gtp:pslist){
                gtp.setId(StringUtils.get32UUID());
                gtp.setTypeId(id);
                gtp.setGmtCreate(DateUtils.getNowDate());
                gtp.setDelFlag(0);
                gtp.setLocation(i);
                goodsTypeParamsMapper.insertGoodsTypeParams(gtp);
                i++;
            }
        }
        return 1;
    }

    /**
     * 修改商品类型
     * 
     * @param goodsType 商品类型
     * @return 结果
     */
    @Override
    public int updateGoodsType(GoodsType goodsType)
    {
        return goodsTypeMapper.updateGoodsType(goodsType);
    }

    @Override
    @Transactional
    public int editGoodsType(GoodsType goodsType) {
        goodsType.setGmtModified(DateUtils.getNowDate());
        goodsTypeMapper.updateGoodsType(goodsType);
        goodsTypeSpecMapper.removeByTypeId(goodsType.getId());
        goodsTypeSpecValuesMapper.removeByTypeId(goodsType.getId());
        List<GoodsTypeSpec> list = goodsType.getTypeSpecList();
        if (list!=null&&list.size()>0){
            int i =0;
            for (GoodsTypeSpec gts:list){
                gts.setGmtModified(DateUtils.getNowDate());
                gts.setLocation(i);
                gts.setTypeId(goodsType.getId());
                gts.setDelFlag(0);
                if (gts.getId()==null||"".equals(gts.getId())){
                    gts.setId(StringUtils.get32UUID());
                    gts.setGmtCreate(DateUtils.getNowDate());
                    goodsTypeSpecMapper.insertGoodsTypeSpec(gts);
                }else {
                    goodsTypeSpecMapper.updateGoodsTypeSpec(gts);
                }
                i++;

                List<GoodsTypeSpecValues> vlist = gts.getSpecValList();
                if (vlist!=null&&vlist.size()>0){
                    int y =0;
                    for (GoodsTypeSpecValues gv:vlist){
                        gv.setLocation(y);
                        gv.setGmtModified(DateUtils.getNowDate());
                        gv.setTypeSpecId(gts.getId());
                        gv.setTypeId(goodsType.getId());
                        gv.setTypeSpecId(gts.getId());
                        gv.setSpecId(gts.getSpecId());
                        gv.setDelFlag(0);
                        if (gv.getId()==null||"".equals(gv.getId())){
                            gv.setId(StringUtils.get32UUID());
                            goodsTypeSpecValuesMapper.insertGoodsTypeSpecValues(gv);
                        }else {
                            goodsTypeSpecValuesMapper.updateGoodsTypeSpecValues(gv);
                        }
                        y++;
                    }
                }

            }
        }
        goodsTypeParamsMapper.removeByTypeId(goodsType.getId());
        List<GoodsTypeParams> pslist = goodsType.getTypeParamsList();
        if (pslist!=null&&pslist.size()>0){
            int i=0;
            for (GoodsTypeParams gtp:pslist){
                gtp.setTypeId(goodsType.getId());
                gtp.setGmtModified(DateUtils.getNowDate());
                gtp.setLocation(i);
                gtp.setDelFlag(0);
                if (gtp.getId()==null||"".equals(gtp.getId())){
                    gtp.setId(StringUtils.get32UUID());
                    gtp.setGmtCreate(DateUtils.getNowDate());
                    goodsTypeParamsMapper.insertGoodsTypeParams(gtp);
                }
                else {
                    goodsTypeParamsMapper.updateGoodsTypeParams(gtp);
                }
                i++;
            }
        }
        return 1;
    }

    /**
     * 删除商品类型对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteGoodsTypeByIds(String[] ids)
    {
        return goodsTypeMapper.deleteGoodsTypeByIds(ids);
    }

    /**
     * 删除商品类型信息
     * 
     * @param id 商品类型ID
     * @return 结果
     */
    @Override
    public int deleteGoodsTypeById(String id)
    {
        return goodsTypeMapper.deleteGoodsTypeById(id);
    }

    @Override
    @Transactional
    public int removeGoodsTypeById(String id) {
        goodsTypeMapper.deleteGoodsTypeById(id);
        goodsTypeSpecMapper.removeByTypeId(id);
        goodsTypeSpecValuesMapper.removeByTypeId(id);
        goodsTypeParamsMapper.removeByTypeId(id);
//        goodsTypeParamgMapper.removeByTypeId(id);
        return 1;
    }
}
